2-3. Computation and Representation

7/31/2025

https://introtcs.org/public/lec_02_representation.html#representing-objects-beyond-numbers

์ˆซ์ž ์™ธ์˜ ๋‹ค๋ฅธ ์ž๋ฃŒ์˜ ํ‘œํ˜„

encoding, decoding ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ E,D๋ผ๊ณ  ํ•˜์ž.
๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค ๊ฐ์ฒดobject๋ฅผ ํ‘œํ˜„ํ•˜๋Š” representation scheme์€ (E,D)๋‹ค.

E๋Š” ๊ฐ์ฒด๋ฅผ 0,1์˜ ์œ ํ•œ๊ธธ์ด ์ˆ˜์—ด๋กœ, D๋Š” 0,1์˜ ์œ ํ•œ๊ธธ์ด ์ˆ˜์—ด์„ ๊ฐ๊ฐ ๋งตํ•‘ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜.
๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด์˜ ๋ถ€๋ถ„์„ o๋ผ๊ณ  ํ•˜๊ณ  ๋ชจ๋“  o ๋“œ๋ฆฌ o = D(E(o)) ์—ฌ์•ผ ํ•œ๋‹ค.
์ด๊ฒŒ D๊ฐ€ onto, ์ „์‚ฌํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ํ•จ์˜ํ•œ๋‹ค.
์™œ?
D์˜ ์ •์˜์—ญ์€ ์ด์ง„์ˆ˜์—ด์ด๋‹ค. o1,o2,o3 ์„ E๊ฐ€ 00,01,10 ์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ๋‹ค๋ฉด 00,01,10์„ ๊ฐ๊ฐ o๋“ค๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ 1001110์€ ๋ณ€ํ™˜ํ•  o๊ฐ€ ์—†๋‹ค(๋ถ€๋ถ„ํ•จ์ˆ˜).
๊ทธ๋ž˜์„œ ์ •์˜์—ญ์ด ํฌ๊ธฐ๋•Œ๋ฌธ์— ์ „์‚ฌํ•จ์ˆ˜. ๋ฐ˜๋Œ€๋กœ E๋Š” ๋‹จ์‚ฌํ•จ์ˆ˜๋‹ค.

Finite representations

๊ฐ์ฒด O๊ฐ€ ์œ ํ•œํ•˜๋‹ค๋ฉด, ์ˆ˜์—ด์€ ์œ ํ•œํ•œ ๊ธธ์ด n์„ ๊ฐ€์ง„๋‹ค. n์ž๋ฆฌ์ˆ˜ ์ด์ง„ ์ˆ˜์—ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 2^{n+1}-1๊ฐœ๋‹ค.

S= {s0,s1,s2,....,sk} , T={t0,t1,t2,.....tm}
์ง‘ํ•ฉ S,T๊ฐ€ ์žˆ๊ณ  E : S -> T ์˜ E๊ฐ€ ๋‹จ์‚ฌํ•จ์ˆ˜๋ผ๋ฉด, S์˜ ํฌ๊ธฐ๊ฐ€ T์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค.(์ •์˜์ƒ)
์ •์˜์ƒ ๋‹จ์‚ฌ ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ •์˜์—ญ์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ์น˜์—ญ๊ณผ 1:1 ์—ฐ๊ฒฐ์ด ๋˜์–ด์•ผ ํ•˜๋‹ˆ๊นŒ.

Prefix-free encoding

prefix๋ž€?
y์™€ y๊ฐ€ ์žˆ์„๋•Œ y<=y๋ฉด์„œ y์˜ i๋ฒˆ์งธ ๊นŒ์ง€ y์˜ i๋ฒˆ์งธ์™€ ๊ฐ™์œผ๋ฉด y๋Š” y์˜ prefix๋‹ค.
"Hello"์™€ "Hello,World"๊ฐ€ ์žˆ์œผ๋ฉด Hello๊ฐ€ prefix๋ผ๋Š” ๋ง.

prefix-free?
๋ง ๊ทธ๋Œ€๋กœ prefix๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. O์˜ ๋ถ€๋ถ„๋“ค์ธ o๋ฅผ E(o)ํ–ˆ์„ ๋•Œ, ์–ด๋–ค E(o)๋„ E(o`)์˜ prefix๊ฐ€ ์•„๋‹๋•Œ.

prefix-free implies tuple encoding.

์ธ์ฝ”๋”ฉ ํ•จ์ˆ˜ E๊ฐ€ ๊ฐ์ฒด O๋ฅผ ์ด์ง„์ˆ˜์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  prefix-freeํ•˜๋‹ค๋ฉด, ๋ณ€ํ™˜๋œ ๊ฐ ์ด์ง„์ˆ˜์—ด์„ ์ˆœ์„œ์— ๋งž๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š”๊ฒƒ๊ณผ ๋˜‘๊ฐ™๋‹ค.
o1,o2,o3์˜ E๊ฒฐ๊ณผ๊ฐ’์ด ๊ฐ๊ฐ 0,10,110 ์ด๋ฉด, E(o1,o2,o3) = E(o1)E(o2)E(o3) = 010110.
๊ทธ๋ฆฌ๊ณ  E(o1,o2,o3) 010110 ๊ณผ 1-1 ๊ด€๊ณ„์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
์™œ?
๊ฐ„๋žตํ•˜๊ฒŒ ๋งํ•˜๋ฉด prefix๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ ์ค‘๋ณต์ด ์—†์–ด์„œ 010110์„ ํ•ด๋…ํ•˜๋ฉด์„œ 01/01/10์ธ์ง€ 0/101/10์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ. ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ์€ 1-n๊ด€๊ณ„.

prefix-free๋กœ ๋งŒ๋“ค๋ ค๋ฉด?

์–ด๋–ค๊ฑด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ prefix-free์ƒํƒœ์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋ น ๋ชจ๋“  ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๋ฌผ์˜ ๊ธธ์ด๊ฐ€ ๋˜‘๊ฐ™๋‹ค๋ฉด ์–ด๋–ค๊ฒƒ๋„ ๋‹ค๋ฅธ ์–ด๋–ค๊ฒƒ์˜ prefix๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
prefix์ •์˜์ƒ y๊ฐ€ y์˜ ๊ธธ์ด ์ดํ•˜์ด๋ฉด์„œ, y๊ฐ€ y๋ฅผ ์™„์ „ํžˆ ํฌํ•จํ•ด์•ผ prefix๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋“  ์ธ์ฝ”๋”ฉ์ด ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด์„œ ์–ด๋–ค๊ฒƒ์ด prefix๊ฐ€ ๋œ๋‹ค๋Š”๊ฑด ๋‘ ์ธ์ฝ”๋”ฉ์ด ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์ด๊ฑด ์ธ์ฝ”๋”ฉ ํ•จ์ˆ˜ E๊ฐ€ 1-1 ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์ฝ”๋”ฉ ํ•จ์ˆ˜์˜ ์ •์˜์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ผ๋‹จ ์•ž์—์„œ rational numbers๋ฅผ ๋ณ€ํ™˜ํ–ˆ๋˜๊ฒƒ ์ฒ˜๋Ÿผ 0->00 ์œผ๋กœ 1->11๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
์ฆ๋ช…:

  1. E๊ฐ€ 1-1 ํ•จ์ˆ˜์ด๋ฉด์„œ
  2. E๊ฐ€ prefix-free๋ผ๋ฉด (์‚ฌ์‹ค prefix-free๋ผ๋ฉด ์ด๋ฏธ 1-1ํ•จ์ˆ˜๋‹ค.)
# takes functions encode and decode mapping
# objects to lists of bits and vice versa,
# and returns functions pfencode and pfdecode that
# maps objects to lists of bits and vice versa
# in a prefix-free way.
# Also returns a function pfvalid that says
# whether a list is a valid encoding
def prefixfree(encode, decode):
    def pfencode(o):
        L = encode(o)
        return [L[i//2] for i in range(2*len(L))]+[0,1]
    def pfdecode(L):
        return decode([L[j] for j in range(0,len(L)-2,2)])
    def pfvalid(L):
        return (len(L) % 2 == 0 ) and all(L[2*i]==L[2*i+1] for i in range((len(L)-2)//2)) and L[-2:]==[0,1]

    return pfencode, pfdecode, pfvalid

pfNtS, pfStN , pfvalidN = prefixfree(NtS,StN)

NtS(234)
# 11101010
pfNtS(234)
# 111111001100110001
pfStN(pfNtS(234))
# 234
pfvalidM(pfNtS(234))
# true

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธ์ฝ”๋”ฉ๋“ค

๋ฌธ์ž ์ธ์ฝ”๋”ฉ

ASCII ์ฝ”๋“œ
์•„์Šคํ‚ค์ฝ”๋“œ๋Š” ์˜์–ด ์•ŒํŒŒ๋ฒณ์„ ํฌํ•จํ•œ 128๊ฐœ ๋ฌธ์ž๋ฅผ ๊ณ ์ •๋œ 7๋น„ํŠธ ๊ธธ์ด๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
์œ„์—์„œ ๋ณธ๊ฒƒ์ฒ˜๋Ÿผ ๊ธธ์ด๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ์ธ์ฝ”๋”ฉ์€ ์ž์—ฐํžˆ Prefix-free๋‹ค.

Unicode
UTF-8 ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉํ•˜๋Š”๋ฐ, ์ด๋Š” ASCII์™€ ๋‹ฌ๋ฆฌ ๊ฐ€๋ณ€ ๊ธธ์ด๋กœ prefix-free๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Vectors, matrices, images ์ธ์ฝ”๋”ฉ

๋ฒกํ„ฐ๋Š” ์ˆซ์ž๋“ค์˜ ๋ฆฌ์ŠคํŠธ์ด๊ณ  ๋ฉ”ํŠธ๋ฆญ์Šค๋Š” ๋ฒกํ„ฐ์˜ ๋ฆฌ์ŠคํŠธ๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋Š” ๋ชจ๋“  ํ”ฝ์…€๋“ค์ด ๊ฐ€์ง€๊ณ ์žˆ๋Š” rgb๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
ํ•˜์ง€๋งŒ ํšจ์œจ์ ์ด์ง€ ์•Š์•„์„œ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ . ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” JPEG๋ฐฉ์‹์€ ์ด๋ ‡๊ฒŒ ์ธ์ฝ”๋”ฉ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ž˜ํ”„ ์ธ์ฝ”๋”ฉ

adjacency matrix๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
๊ฐ ๋…ธ๋“œ 0,1,2,3 ์ด ๊ฐ์ž ์—ฃ์ง€๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ๋‹ค์‹œ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๋Š” ๋ฐฉ๋ฒ•.

[0,0,1,1] 0->2,3
[1,0,0,0] 1->0
[1,0,0,1] 2->0,3
[0,1,0,0] 3->1

๊ทผ๋ฐ ์ด๊ฑธ ๋˜‘๊ฐ™์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ด์„์ˆ˜ ๋„ ์žˆ๋‹ค.
adjacency list๋กœ

[2,3]
[0]
[0,3]
[1]

๋‘˜์˜ ์ฐจ์ด๊ฐ€ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ๊ต์žฌ์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค.
๋Œ€ํ‘œ์ ์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ์—ฃ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ์กฐํšŒํ•  ๋•Œ์—๋Š” ๋ฆฌ์ŠคํŠธ ๋ฐฉ๋ฒ•์ด ๋ถˆ๋ฆฌํ•˜๋‹ค : ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ matrix[i][j]๋กœ ํ•œ๋ฒˆ์— ์กฐํšŒ ๊ฐ€๋Šฅ. 1 or 0. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” i๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฃ์ง€๋“ค์„ ๋‹ค ์กฐํšŒํ•ด์„œ j๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

Computational tasks

์ปดํ“จํŒ…, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ computational process๋ž€ ์ž…๋ ฅ -> ์ถœ๋ ฅ ์„ ์‹คํ–‰ํ•˜๋Š” ์ผ์ข…์˜ ํ•จ์ˆ˜๋‹ค.

specification, implementation

(mathematical functions ๊ณผ algorithms/programs ๋ถ„๋ฆฌ.)
์ปดํ“จํŒ…์— ๋Œ€ํ•ด์„œ ์• ๊ธฐํ•  ๋•Œ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์˜ ์ฃผ์ œ๊ฐ€ ์žˆ๋‹ค.

  1. ์ž…๋ ฅ -> ์ถœ๋ ฅ์„ ์–ด๋–ป๊ฒŒ ๋งตํ•‘ํ•  ๊ฒƒ์ธ๊ฐ€?
  2. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฑธ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€
    ๋‘˜ ๋‹ค "์–ด๋–ป๊ฒŒ"๋ผ๋Š” ์งˆ๋ฌธ์„ ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๊ตฌ๋ถ„๋œ๋‹ค.
    ๊ทธ๋ž˜์„œ mathematical function ๊ณผ algorithm์˜ ๋ถ„๋ฆฌ๋ผ๊ณ ๋„ ํ•œ๋‹ค.

1๋ฒˆ์€ ์ˆ˜ํ•™์ ์ธ ์˜๋ฏธ๋กœ 'ํ•จ์ˆ˜'์— ๋Œ€ํ•ด์„œ ๋ฌป๋Š” ์งˆ๋ฌธ์ด๋‹ค. ๊ทธ๋‹ˆ๊นŒ ์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค ์ˆ˜ํ•™ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์•ผ ๋˜๋Š”์ง€๋ฅผ, ์ฆ‰ computational task๋ฅผ ๋ฌป๋Š”๊ฒƒ์ด๋‹ค.
(2,3) -> 6, (3,4) ->12, (4,5)->20 ์€ ์ž…๋ ฅ๋œ ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฒฐ๊ณผ์˜ ์ž์—ฐ์ˆ˜์™€ ๋งตํ•‘ํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.
๋„ˆ๋ฌด ๊ฐ„๋‹จํ•ด์„œ ์ž˜ ์•ˆ๋ณด์ด์ง€๋งŒ ์–ด์จ‹๋“  'm๊ณผn์„ ๊ณฑํ•˜๊ธฐ' ๊ฐ€ ์ž„๋ฌด๊ณ ,
๊ทธ๊ฑธ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ m์„ n๋ฒˆ ๋”ํ•˜๊ธฐ, ํ˜น์€ ๊ต์žฌ ์•ž์—์„œ ๋‚˜์™”๋˜ ๋ฐฉ๋ฒ•(grade-school algorithm)์ด ์žˆ๋‹ค. (์ด๊ฒŒ ์ „๋ถ€๋Š” ์•„๋‹˜. ๋” ์žˆ๋‹ค.)

def mult1(x,y):
  res = 0
  while y>0:
    res += x
    y -= 1
  return res

def mult2(x,y):
  a = str(x) # represent x as string in decimal notation
  b = str(y) # represent y as string in decimal notation
  res = 0
  for i in range(len(a)):
    for j in range(len(b)):
      res += int(a[len(a)-i])*int(b[len(b)-
        j])*(10**(i+j))โ†ช
  return res

print(mult1(12,7))
# 84
print(mult2(12,7))
# 84

3๊ณผ 4๋ฅผ ๊ฐ€์ง€๊ณ  12๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋ ค๋ฉด ์–ด๋–คwhat ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ์ง€ ์•Œ์•„์•ผํ•˜๊ณ (specification)
๊ทธ๊ฑธ ์–ด๋–ป๊ฒŒhow ๊ตฌํ˜„ํ•˜๋Š”์ง€ ์•Œ์•„์•ผํ•œ๋‹ค(implementation).